Un
moteur de jeu est une application informatique (dite de type
middleware) apportant les fonctionnalités principales au fonctionnement d'un
Jeu vidéo, mais aussi une aide au développement ou à la portabilité du jeu. Les fonctionnalités généralement fournies par un moteur de jeu sont un moteur de rendu (que ce soit 2D ou 3D), un moteur physique ou juste les détections de collision, la gestion du son, le scriptage, l'animation, des fonctions d'intelligence artificielle, un support réseau.
Vue générale
Dans les jeux vidéo modernes, il existe cinq ensembles principaux gérés par des moteurs distincts, chacun concernant une fonction spécifique du développement : le graphisme, le son, le réseau (pour les jeux multijoueurs), la physique et l'intelligence artificielle. Mais la définition d'un moteur de jeu reste malgré tout relativement floue en raison de la juxtaposition des notions. Un moteur de jeu est ainsi le regroupement de l'ensemble des moteurs spécialisés nécessaires à la réalisation d'un jeu.
Par exemple la société Valve Software commercialise le Source engine qui est le nom commercial de son moteur de jeu. Le Source engine est une solution de développement « clé en main » regroupant les différents moteurs (graphisme, son...) nécessaires au développement d'un jeu. La gestion de la physique de ce moteur de jeu est assurée par le moteur Havok, spécialisé et développé par une société tierce et qui est lui-même utilisé dans d'autres moteurs de jeu.
Le choix d'un studio de création de jeu se limite donc généralement à acheter ou développer tout ou partie des moteurs nécessaires au développement de son jeu. Il est en revanche important de signaler que depuis plusieurs années le rôle des moteurs de jeu ne cesse de grandir. L'investissement que représente en effet le développement des moteurs de jeu ne cesse de croître et rend délicat voire impossible l’amortissement de ceux-ci sur une unique production.
Parmi les moteurs de jeu les plus utilisés ou remarqués ces dernières années, on citera (liste non exhaustive) : le Renderware, les différents Unreal engine, Quake engine, le Source engine, le CryENGINE, le Torque engine, Reality engine, Havok, Novodex, Antiryad Gx, etc.
Application middleware
Certaines compagnies sont maintenant spécialisées dans le développement de logiciels dits de
middleware, c'est-à-dire fournissant des fonctions qui restent personnalisables. De tels développements ont pour but de ne plus « réinventer la roue » en développant une suite logicielle robuste qui inclut plusieurs éléments nécessaires à la création d'un jeu. De nombreux logiciels de ce type dans le jeu vidéo fournissent des facilités de développement pour les graphismes, les sons, la physique, et l'implémentation d'intelligences artificielles. Gamebryo et RenderWare sont deux représentants largement répandus.
Certains middlewares fournissent exclusivement une seule facilité, comme par exemple la synthèse d'arbres et de plantes, c'est le cas de SpeedTree, cette spécialisation lui permet de générer des images plus convaincantes que des moteurs plus généralistes.
Certains middlewares fournissent tout le Code source, d'autres publient la spécification de leur interface de programmation pour permettre la liaison avec d'autres logiciels. Certains encore, proposent l'un ou l'autre des arrangements selon le contrat signé et les honoraires.
Fonctionnalités
Chaque moteur de jeu est unique. Toutefois, certaines fonctionnalités se retrouvent.
Les entrées/sorties
Cette partie s'occupe de la lecture des périphériques externes :
- Joystick (lecture de l'état des boutons et du ou des sticks)
- Souris (lecture de l'état des boutons, du mouvement relatif, de la position)
- Clavier
Elle est aussi en charge de la lecture des données du jeu, et de l'écriture des sauvegardes.
- Lecture/écriture depuis un disque dur.
- Lecture depuis un DVD, un CD ou un mini disk.
- Lecture/écriture depuis une carte mémoire.
C'est elle qui se chargera de compresser/décompresser les données du jeu (notamment pour accélérer les chargements). Elle sera aussi en charge de leur éventuel cryptage/décryptage.
Les mathématiques
On y trouvera toutes sortes de fonctions mathématiques nécessaires à l'élaboration d'un jeu. Pour un jeu 3D, on y trouvera plus particulièrement :
- les matrices. En général des matrices 3x4 ou 4x4 pour le stockage de l'orientation des objets (sur les trois axes), de leur scale (sur les trois axes) et parfois aussi de leur position. La signification réelle des lignes et colonnes est directement liée au moteur et n'a pas toujours de base mathématique réelle. Certains stockeront un scale uniforme sur la dernière colonne ou ligne, d'autres la translation, d'autres encore utiliseront des matrices de transformations plus complexes pour éviter les problèmes de scale dans le cas des matrices hiérarchisées.
- les quaternions. Ils servent au stockage des orientations. Ils sont beaucoup plus compacts que les matrices et supportent beaucoup mieux les interpolations. On les retrouve typiquement dans les animations, pour stocker l'orientation de chaque clef d'interpolation.
- les vecteurs. À deux, trois ou quatre dimensions. On parle de composantes x, y, z et w. La composante w n'est en général pas utilisée, et n'existe qu'à des fins d'optimisation sur les processeurs 128 bits.
On peut citer comme exemple de calcul très souvent effectué dans un moteur de jeu : la multiplication de matrices, l'inversion de matrices, le produit scalaire ou vectoriel.
La physique
Le module de physique calculera le mouvement des objets, la manière dont ils interagissent les uns avec les autres, la manière dont ils glissent sur le sol ou sur les murs, la manière dont ils rebondissent etc. C'est lui aussi qui calculera la déformation des objets mous, des cheveux, poils, vêtements et autres rideaux. On peut distinguer trois grandes catégories de simulation :
- la physique du point. C'est la plus simple. Un objet est formalisé par un seul point en mouvement avec une vitesse, une accélération, une friction, de la gravité etc. En général, ce genre de physique se contente de déplacer les objets sans agir sur leur orientation.
- la physique du solide. Chaque entité est formalisée par une ou plusieurs formes mathématiques (boîte, sphère, gellule, cylindre) ou même par un mesh convexe. La physique du solide est beaucoup plus réaliste (et donc complexe) que la physique du point puisqu'elle gère aussi l'évolution de l'orientation. Certains éditeurs se sont spécialisés dans la fabrication de modules de physiques du solide pouvant être directement intégrés dans les moteurs existants. On citera par exemple Havok, Novodex, et dans le domaine du libre Ode.
- la physique de particules. Elle s'apparente à la physique du point. Un volume est constitué d'un ensemble de particules (on parle aussi datomes) liées entres eux par des contraintes (le plus souvent des ressorts). Ce type de physique autorise la déformation et la rupture des volumes. Elle est donc particulièrement bien adaptée à la simulation des tissus.
Détection des collisions
La gestion des collisions est une couche logicielle qui permet de détecter lorsque deux objets se rencontrent et ainsi de pouvoir définir une action résultante. Un objet est alors une représentation géométrique d'éléments du jeu (personnages, obstacle, projectiles, astéroïdes…).
Un module de collision est typiquement constitué d'un ensemble de fonctions mathématiques pour le calcul des intersections par paires de primitives géométriques : sphère contre sphère, sphère contre boîte, boîte contre triangle… Chacune de ces fonctions calculera selon les capacités du module le point d'intersection, la normale au point de contact, ainsi que la distance de pénétration des deux objets.
On distingue deux grandes catégories de collisions :
- La détection sur modèle d'objets statiques, la plus simple, considère deux objets sont en collision si au moment du traitement de la détection les deux objets se touchent. Comme le traitement est échantillonné régulièrement dans le temps, des objets en mouvement rapide ont très bien pu entrer en contact avec d'autres objets entre deux temps d'échantillonnage.
- La détection sur modèle d'objets dynamiques s'attache aussi au mouvement des objets. On traite la transition d'un instant échantillonné au suivant. Les calculs sont plus coûteux, mais ont l'avantage d'empêcher un volume en mouvement d'en traverser un autre sans que cela soit détecté. L'instant de la collision de deux objets peut être calculé plus précisément qu'avec la technique dite statique.
Selon le type de jeu l'une ou l'autre des approches est utilisée. Les moteurs de jeux en 3D actuelles utilisent typiquement un mélange de ces deux méthodes.
Pour optimiser les calculs de collision sur les formes complexes, les moteurs de jeu peuvent utiliser la notion de volume englobant et plus généralement de hiérarchie de volumes englobants. Le calcul rapide mais approximatif permet alors d'éliminer des états de non collision, dans le cas contraire un calcul exact est réalisé sur l'objet. La hiérarchie de volumes englobants rajoute seulement des étapes supplémentaires en subdivisant un objet en sous ensembles englobés dans une forme simple.
Pour réduire le nombre de calcul de paire d'objets les moteurs recourent généralement à structurer l'espace en sous ensembles d'objets proches.
Le Graphisme
Article détaillé : .Le son
Article détaillé : .Recours au langage de script
Le recours au
Langage de script est une méthode qui a aujourd'hui fait ses preuves, permettant, du point de vue développeur, de faciliter le paramétrage du moteur de jeu en fonction du
Gameplay qu'il a été décidé de réaliser. Le recours au script dans un projet de développement a pour conséquence de séparer les métiers, le programmeur du moteur peut s'occuper spécialement de cette tâche, le concepteur de niveaux (
level designer) peut améliorer le
gameplay sans pour cela être un programmeur chevronné.
Historiquement, le besoin d'un système de script s'est fait sentir pour les jeux d'aventure nécessitant beaucoup d'interactions, il en a découlé Script Creation Utility for Maniac Mansion (SCUMM), créé initialement et comme son nom l'indique pour le jeu Maniac Mansion (1987) et réutilisé pour chaque nouveau jeu avec un minimum de modifications, il a resservi pour le jeu The Curse of Monkey Island (1997) soit 10 ans plus tard. Les autres types de jeu sont aussi devenus à leur tour complexes, leurs moteurs de jeu ont alors souvent incorporé un système de script .
Pour le développement de Jedi Knight: Dark Forces II (1997), le moteur de jeu a été adapté pour supporter un langage de script. Robert Huebner, qui a participé à cette évolution, explique qu'il existait avant cela un langage binaire INF qu'il était dur d'assimiler, un livret compté était destiné à cet usage. Le langage de script implémenté : COG est compilé à la volée lors du lancement d'une partie puis exécuté sur une Machine virtuelle (un automate à pile) pour assurer la robustesse du jeu. Il n'y a eu aucune conséquence négative rapportée que ce soit sur le développement ou sur le jeu lui-même, mais plutôt un accroissement de la créativité des concepteurs .
Certaines entreprises ont développé leurs propres langages de script, comme il est écrit plus haut, c'est aussi le cas de Id Software avec le langage QuakeC ou de Epic Games avec le langage UnrealScript. Mais l'intégration d'un langage de script est devenu très accessible, certaines bibliothèques logicielles étant développées indépendamment spécialement dans ce but. C'est le cas de la bibliothèque et du langage Lua qui a été utilisé dans un grand nombre de jeux de genres très divers .
L'intelligence artificielle
Article détaillé : .Le réseau
Article détaillé : .Notes et références
Liens externes
- Developpez.com, ressources pour le développement de moteurs de jeux vidéo.
- Moteur for Free, promeut les projets amateurs et propose un annuaire de moteur 2D et 3D. (site apparemment mort)
- (en) GameMiddleware.org, annuaire de solutions middleware commerciales pour les jeux vidéo.